package com.chub.study.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.IllegalSQLInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

/**
 * @author : chub
 * @version : V1.0.0
 * @fileName : MybatisPlusConfig.java
 * @description : 在MybatisPlusConfig类中，将刚才创建的SQL注入器InsertBatchSqlInjector 注册为一个bean。
 * @createTime : 2023-10-16 18:32
 */
@Component
@Configuration
// @MapperScan("com.chub") // 指定controller层路径
public class MybatisPlusConfig {
    // 其他内容，与当前话题无关

    @Bean
    public InsertBatchSqlInjector easySqlInjector() {
        return new InsertBatchSqlInjector();
    }

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        // 添加非法SQL拦截器  配置完成后，如果执行了不带 where 条件的 update 或者 delete 语句，就会报错误。
        // 如果你的 SQL 后面有个 where 1=1，那么这样的 SQL 是不会被 IllegalSQLInnerInterceptor 插件识别并拦截的。
        // 未使用索引也报错，这里不能用： 非法SQL，SQL未使用到索引, table:t_psn_info, columnName:EFF_STAT
        // interceptor.addInnerInterceptor(new IllegalSQLInnerInterceptor());

        OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor = new OptimisticLockerInnerInterceptor();
        interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor);


        //如果配置多个插件,切记分页最后添加
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        //分页插件总数统计优化, 这样有可能导致总数统计与实际值不一样
        paginationInnerInterceptor.setOptimizeJoin(true);
        //如果有多数据源可以不配具体类型 否则都建议配上具体的DbType
        paginationInnerInterceptor.setDbType(DbType.MYSQL);
        paginationInnerInterceptor.setOverflow(true);
        interceptor.addInnerInterceptor(paginationInnerInterceptor);




        return interceptor;
    }



}
